extensions/cairo: implement rgb8 to cairo32, speeding up RGB linear half display
authorØyvind Kolås <pippin@gimp.org>
Fri, 16 Dec 2016 00:01:43 +0000 (01:01 +0100)
committerØyvind Kolås <pippin@gimp.org>
Fri, 16 Dec 2016 00:01:43 +0000 (01:01 +0100)
extensions/cairo.c

index 2d807cb055dba1068f439a59866fc6c1fe817448..457b9383201be86a9066b31283129979221b0a8a 100644 (file)
@@ -125,6 +125,24 @@ conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
   return samples;
 }
 
+static inline long
+conv_rgb8_cairo32_le (unsigned char *src, unsigned char *dst, long samples)
+{
+  long n = samples;
+  while (n--)
+    {
+      unsigned char red    = *src++;
+      unsigned char green  = *src++;
+      unsigned char blue   = *src++;
+
+      *dst++ = blue;
+      *dst++ = green;
+      *dst++ = red;
+      *dst++ = 0xff;
+    }
+  return samples;
+}
+
 
 
 
@@ -305,6 +323,10 @@ init (void)
       babl_conversion_new (babl_format ("R'G'B'A u8"), f32, "linear",
                            conv_rgbA8_cairo32_le, NULL);
 
+
+      babl_conversion_new (babl_format ("R'G'B' u8"), f32, "linear",
+                           conv_rgb8_cairo32_le, NULL);
+
       babl_conversion_new (babl_format ("Y'A u8"), f32, "linear",
                            conv_yA8_cairo32_le, NULL);
       babl_conversion_new (babl_format ("Y'A u16"), f32, "linear",